import { IsBoolean, IsNumber, IsOptional, IsString, Length, IsNotEmpty } from 'class-validator';
import { PaginationDto } from '@dtos/pagination.dto';

export class CreateDepartmentDto {
  @IsString({ message: '部门名称必须是字符串' })
  @IsNotEmpty({ message: '部门名称不能为空' })
  @Length(1, 50, { message: '部门名称长度为 1-50 位' })
  name: string;

  @IsBoolean({ message: '状态必须是布尔值' })
  @IsOptional()
  status?: boolean = true;

  @IsString({ message: '备注必须是字符串' })
  @IsOptional()
  @Length(1, 100, { message: '备注长度为 1-100 位' })
  remark?: string;

  @IsNumber({}, { message: '父级部门 ID 必须是数字' })
  @IsOptional()
  parentDeptId?: number;
}

export class UpdateDepartmentDto {
  @IsString({ message: '部门名称必须是字符串' })
  @IsNotEmpty({ message: '部门名称不能为空' })
  @Length(1, 50, { message: '部门名称长度为 1-50 位' })
  name: string;

  @IsBoolean({ message: '状态必须是布尔值' })
  @IsOptional()
  status?: boolean = true;

  @IsString({ message: '备注必须是字符串' })
  @IsOptional()
  @Length(1, 100, { message: '备注长度为 1-100 位' })
  remark?: string;

  @IsNumber({}, { message: '父级部门 ID 必须是数字' })
  @IsOptional()
  parentDeptId?: number;
}

export class DeptPageDto extends PaginationDto {
  @IsString({ message: '部门名称必须是字符串' })
  @IsOptional()
  @Length(1, 50, { message: '部门名称长度为 1-50 位' })
  name?: string;

  @IsBoolean({ message: '状态必须是布尔值' })
  @IsOptional()
  status?: boolean;
}
